import ascii ############################################################################# # Question 1 et 2 : Écrire les codes des fonctions bin2dec et qrcode2dec # Proposer un test de qrcode2dec ############################################################################# def bin2dec(bits): n = 0 for bit in bits: n = 2 * n + bit return n # implémentation du QR Code de la figure 1: qrcode_fig1 = ascii.figure1 def qrcode2dec(qrcode): resultat = [] for ligne in qrcode: resultat.append(bin2dec(ligne)) return resultat print(qrcode2dec(qrcode_fig1)) # Application à la figure 1 : # # (0,1,0,0,1,1,0,1) → 77 → M # (0,0,1,0,1,1,1,0) → 46 → . # (0,1,0,0,1,0,0,0) → 72 → H # (0,1,1,0,0,0,0,1) → 97 → a # (0,1,1,1,0,0,1,0) → 114 → r # (0,1,1,0,0,0,0,1) → 97 → a # # Chaîne obtenue : M.Hara. # Le nom de l’inventeur à reconnaître est donc Masahiro Hara. ############################################################################# # Question 3 : Fonctions dec2str et test_dec2str ############################################################################# def dec2str(liste_dec): table_ascii = ascii.dict_ascii chaine = "" for entier in liste_dec: if entier in table_ascii: chaine += table_ascii[entier] else: chaine += "?" return chaine def test_dec2str(): """ Teste la fonction dec2str avec des données issues du module fourni """ tests = [ascii.test1, ascii.test2, ascii.test3] for test in tests: print(dec2str(test)) test_dec2str() def qrcode2str(qrcode): return dec2str(qrcode2dec(qrcode)) ############################################################################# # Question 4 : Fonction str2qrcode déficiente ############################################################################# def str2qrcode(message): """ Convertit une chaine de caractères en liste de tuples binaires. """ qrcode = [] table_inverse = {valeur: cle for cle, valeur in ascii.dict_ascii.items()} for caractere in message: entier = table_inverse.get(caractere, 63) binaire_str = bin(entier)[2:].zfill(8) #binaire_str = bin(entier)[2:] Le problème est que cette écriture supprime les zéros de gauche. ligne = tuple(int(bit) for bit in binaire_str) qrcode.append(ligne) return qrcode print(str2qrcode("M.Hara"))